#include <func.h>

void print_wstatus(int status) {
	// 解析子进程的终止状态
	if (WIFEXITED(status)) {
		printf("Exit code: %d", WEXITSTATUS(status));
	} else if (WIFSIGNALED(status)) {
		printf("Termination Signal: %d", WTERMSIG(status));
#ifdef WCOREDUMP
		if (WCOREDUMP(status)) {
			printf("(core dump)");
		}
#endif
	}
	printf("\n");
}

int main(int argc, char* argv[])
{

	switch (fork()) {
	case -1:
		error(1, errno, "fork");
	case 0:
		printf("Child: pid = %d, ppid = %d\n", getpid(), getppid());
		for(;;);
		// exit(108);
		// _exit(48);
	default: // 父进程
		// pid_t pid = wait(NULL); // 不接受子进程的终止状态信息
		int status;
		pid_t pid = wait(&status); 
		if (pid == -1) {
			error(1, errno, "wait");
		}
		printf("Parent: child %d terminated\n", pid);
		print_wstatus(status);
	}
    return 0;
}

